//参数数据类型不限制  对象类型也可以指定哪些属性是可选的,可以在属性后面添加一个?:
function printCoordinate(point:{x:number,y:number,z?:number}){
    console.log("x坐标:",point.x);
    console.log("y坐标:",point.y);
    if(point.z){
        console.log("z坐标",point.z);
    }
}


printCoordinate({x:10,y:30})
printCoordinate({x:10,y:30,z:40})


//参数不限制,es6剩余参数
function printCoordinate2(x:number,y:number,...args:Array<number>){
    console.log("x坐标:",x);
    console.log("y坐标:",y);
    console.log("其他参数",args);
}
printCoordinate2(10,20,30,40)

//可选类型就可以看做 类型和undefined的连个类型
function print(msg?:string){
    console.log(msg);
}
print()             //undefined
print("coderwhy")   //'codewhy'
print(undefined)    //undefined

//错误
// print(null)

//非空类型断言!
//在使用可选类型的时候可能会传入undefined,这时候不能执行方法
function printCoordinate3(message?:string){
    //会报错因为message可能是undefined会报错
    // console.log(message.toUpperCase()); 
    console.log(message!.toUpperCase());    //确定传入的是有值的话,跳过ts在编译阶段对它的检测

}




export {}